#ifndef LECTEURPROGRAMME_H_
#define LECTEURPROGRAMME_H_

#include "Symbole.h"
#include "LecteurSymbole.h"
#include "TableSymboles.h"
#include "Arbre.h"
#include "LecteurFonction.h"
#include <string>
#include <stack>

#include "Lecteur.h"


class LecteurProgramme : public Lecteur
{
	public :

		LecteurProgramme(string nomFichier);
		void analyse();  // Si le contenu du fichier est conforme à la grammaire,
	                 //   cette méthode se termine normalement et affiche un message "Syntaxe correcte".
                         //   la table des symboles (ts) et l'arbre abstrait (arbre) auront été construits
	                 // Sinon, le programme sera interrompu (exit).

	inline TableSymboles getTs ()    { return ts;    } // accesseur
	inline Noeud*        getArbre () { return arbre; } // accesseur
    string			getC();
	private:

		vector<LecteurFonction *> tf;

		// Grammaire //
		Noeud* programme();			// <programme> ::= { <seq_decl> } debut <seq_inst> fin <EOF>
		void seqDecl();				// <seq_decl> ::= <decl_fonction> ; { <decl_fonction> ; }
		Noeud* appelFonction();		// <appel_fonction> ::= fonction <variable> (<expression> { , <expression> } )
		Noeud* affectation();	// <affectation>::= <variable> = ( <expression> )
		string		buffer;	// Buffer du transcodage

};

#endif
